using System;
using System.Collections;

namespace zuizhong
{
    public class Text
    {

    }
    internal class Plas1
    {
        static void Main(string[] args)
        {
            Console.WriteLine("ArrayList");
            #region     练习题回顾
            //定位：C#核心 索引器练习题
            //自定义一个整形数组类，该类中有一个整型数组变量
            //为它封装增删查改的方法（私没敲....）
            #endregion

            #region     知识点一   ArrayList的本质
            //ArrayList是一个C#为我们封装好的类，
            //它的本质是一个object类型的数组，
            //ArrayList类帮助我们实现很多方法
            //比如数组的增删查改
            #endregion

            #region     知识点二   申明
            //需要引用命名空间using System.Collections;
            //需要学习更多关于此类的知识可以去看微软官方文档（F1）
            ArrayList array = new ArrayList();
            #endregion

            #region     知识点三   增删查改
            //增
            //它可以存储任意类型的数据
            array.Add(1);
            array.Add("123");
            array.Add(true);
            array.Add(new object());
            array.Add(new Text());
            array.Add(true);
            //批量添加
            ArrayList array2 = new ArrayList();
            array2.Add(123);
            //范围增加（批量增加 把另一个list容器里面的内容加到后面）
            array.AddRange(array2);
            //指定位置插入
            array.Insert(1, "067");
            Console.WriteLine(array[1]);

            //删
            //移除指定元素 从头遍历，找到删
            array.Remove(1);
            //移除指定位置的元素
            array.RemoveAt(2);//1是第二个元素
            //清空
            //array.Clear();

            //查
            //得到指定位置的元素
            Console.WriteLine(array[0]);
            //查看元素是否存在
            if (array.Contains("123"))
            {
                //如果查找到就会打印↓
                Console.WriteLine("存在123");
            }
            else
            {
                Console.WriteLine("没找到");
            }
            //正向查找元素位置
            //找到了就返回位置，找不到返回值为-1
            int index = array.IndexOf("123");
            Console.WriteLine(index);
            Console.WriteLine(array.IndexOf(false));

            //反向查找元素位置
            //返回时从头开始的索引数
            index = array.LastIndexOf(true);
            Console.WriteLine(index);

            //改
            //直接指定位置修改
            Console.WriteLine(array[0]);
            array[0] = "999";
            Console.WriteLine(array[0]);
            #endregion

            #region     遍历
            //长度
            Console.WriteLine(array.Count);
            //容量
            //避免产生过多的垃圾
            Console.WriteLine(array.Capacity);
            Console.WriteLine("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
            for (int i = 0; i < array.Count; i++)
            {
                Console.WriteLine(array[i]);
            }
            Console.WriteLine("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
            //迭代器遍历（后面会讲）
            foreach (object item in array)//它会把array里的内容每次叠加到item里
            {
                Console.WriteLine(item);
            }
            #endregion

            #region     知识点四   装箱拆箱
            //尽量少用

            int i = 1;
            array[0] = i;//装箱
            i = (int)array[0];//拆箱
            #endregion
        }
    }
}
